#pragma once

#include "Utilies.h"
#include "Window.h"
#include "Instance.h"
#include "Device.h"
#include "Pipeline.h"
#include "Texture.h"
#include "Model.h"
#include "Buffers.h"
#include "Renderer.h"
#include <vector>
#include <iostream>


namespace vkengine
{

	class Application
	{
	public:
		static constexpr int WIDTH = 800;
		static constexpr int HEIGHT = 600;

		void Run();

	private:
		void Init();
		void InitVulkan();
		void MainLoop();
		void Cleanup();


	private:
		Window m_Window{ WIDTH,HEIGHT,"Vulkan" };
		
		std::unique_ptr<Instance> m_Instance;		
		std::unique_ptr<Device> m_Device;
		std::unique_ptr<Pipeline> m_Pipeline;
		std::unique_ptr<Buffers> m_Buffers;
		std::unique_ptr<Model> m_Model;
		std::shared_ptr<Texture> m_Texture;
		std::unique_ptr<Renderer> m_Renderer;
	};
}